﻿#include "栈.h"

#include <stdio.h>
#include <stdlib.h>

栈_结构* 构造_栈()
{
    栈_结构 *栈 = malloc(sizeof(栈_结构));
    栈->栈顶索引 = 0;
    return 栈;
}

void 销毁_栈(栈_结构* 栈)
{
    free(栈);
}

void 数据入栈(栈_结构* 栈,const 栈数据类型 数据)
{
    栈->数据[栈->栈顶索引] = 数据;
    栈->栈顶索引++;
}

栈数据类型 数据出栈(栈_结构* 栈)
{
    if(栈->栈顶索引 <= 0)
    {
        perror("栈中没有元素");
        return -1;
    }
    栈->栈顶索引--;
    const 栈数据类型 数据 = 栈->数据[栈->栈顶索引];
    return 数据;
}

栈数据类型 查看栈顶数据(const 栈_结构* 栈)
{
    if(栈->栈顶索引 <= 0)
    {
        perror("栈中没有元素");
        return -1;
    }
    const 栈数据类型 数据 = 栈->数据[栈->栈顶索引-1];
    return 数据;
}

bool 栈空了(const 栈_结构 *栈)
{
    return 栈->栈顶索引 <= 0;
}

void 打印栈(const 栈_结构* 栈)
{
    const int 数据个数 = 栈->栈顶索引;
    printf_s("\n->|  顶  |\n");
    for(int i = 数据个数-1; i>= 0; i--)
    {
        const 栈数据类型 数据 = 栈->数据[i];
        printf_s("  |  %-4llu|\n",数据);
    }
    printf_s("------------\n");
}
